home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 5 / The 640 Meg Shareware Studio CD-ROM Volume V (Data Express)(1994).ISO / amiga / avm1_19.lha / rexx / handlefax.avm < prev    next >
Text File  |  1994-04-06  |  12KB  |  500 lines

  1. /* TITLE: avm:source/handlefax.avmsrc */
  2. /* we want results! Otherwise, we wouldn't get anything from RESULT */
  3. options results
  4.  
  5. /* Need to make sure that stdtail.avm is also included */
  6. signal on halt
  7. signal on novalue
  8. signal on syntax
  9. signal on break_c
  10.  
  11. /* needed for some of the functions we use */
  12. call addlib("rexxsupport.library", 0, -30, 0)
  13.  
  14. /* a higher than normal priority since calls are important to us :) */
  15. call pragma('priority', 1)
  16.  
  17. /* ensure that commands are directed to the correct server */
  18. parse arg servername .
  19. address value servername
  20.  
  21.  
  22. parse arg servername mailbox .
  23. if symbol('mailbox') ~= 'VAR' | mailbox = '' then mailbox = 'manual'
  24. options failat 50
  25. if ~show('p', 'REXX_GPFAX') then do
  26.   handle = makeUniqueFile(); call initLogEntry()
  27.   log.comment = 'Fax program not running!'; log.type = 'unknown'
  28.   call saveLogEntry(mailbox, handle)
  29.   exit
  30. end
  31.  
  32. 'requiremode' 'Connected'
  33.  
  34. 'turnoffvoicemode'
  35.  
  36. 'assumemode' 'Unknown'
  37.  
  38. 'setserial' '19200' '8' 'N' '1' '7Wire'
  39. action = rc
  40. select
  41.   when action = 0 then nop
  42.   when action = 14 then nop
  43.   when action = 16 then nop
  44.   otherwise signal arexxerror
  45. end
  46.  
  47. address rexx_gpfax 'listen'
  48. address rexx_gpfax 'recfax'
  49. faxresult = rc
  50. address rexx_gpfax 'unlisten'
  51.  
  52. 'delay' 2
  53. action = rc
  54. select
  55.   when action = 0 then nop
  56.   when action = 12 then signal stdabort
  57.   when action = 14 then signal stderror
  58.   when action = 16 then signal stderror
  59.   otherwise signal arexxerror
  60. end
  61.  
  62. 'writeline' 'AT+FCLASS=0'
  63.  
  64. 'readline' '2'
  65. action = rc
  66. if action = 0 then value = result
  67. select
  68.   when action = 0 then nop
  69.   when action = 10 then nop
  70.   when action = 12 then signal stdabort
  71.   when action = 14 then signal stderror
  72.   when action = 16 then signal stderror
  73.   otherwise signal arexxerror
  74. end
  75.  
  76. 'readline' '2'
  77. action = rc
  78. if action = 0 then value = result
  79. select
  80.   when action = 0 then nop
  81.   when action = 10 then nop
  82.   when action = 12 then signal stdabort
  83.   when action = 14 then signal stderror
  84.   when action = 16 then signal stderror
  85.   otherwise signal arexxerror
  86. end
  87.  
  88. handle = makeUniqueFile()
  89. call initLogEntry()
  90.  
  91. log.comment = 'Fax attempted.'
  92. log.type = 'unknown'
  93. if faxresult <= 5 then signal gotfax
  94. signal finished
  95.  
  96. gotfax:
  97. address rexx_gpfax 'reportlog' 1
  98. faxfilename = result
  99. log.filename = result
  100.  
  101. address rexx_gpfax 'reportlog' 6
  102. log.length = result
  103. address rexx_gpfax 'reportlog' 2
  104. log.comment = result 'page(s) received.'
  105.  
  106. address rexx_gpfax 'reportlog' 4
  107. log.returnnumber = result
  108. log.type = 'fax'
  109.  
  110. finished:
  111. call saveLogEntry(mailbox, handle)
  112.  
  113. call loadMailbox(mailbox)
  114. if mailbox.autofaxforwardb = 1 & mailbox.autofaxforwardscript ~= "" then do
  115.   handle = makeUniqueFile()
  116.   call initLogEntry(); log.origmailbox = mailbox
  117.   log.filename = faxfilename; log.type = 'fax'
  118.   log.returnsendfunc = mailbox.autofaxforwardscript; log.returninterval = 5
  119.   log.returnretry = 3; log.returnnumber = mailbox.autofaxforward
  120.   call saveLogEntry('Outgoing', handle)
  121. end
  122.  
  123. exit
  124.  
  125. /* TITLE: avm:source/simplestdtail.avmsrc */
  126. /* This is the standard tail */
  127. exit
  128.  
  129. exit
  130.  
  131. mailboxDir: procedure
  132.     parse arg mailbox
  133.  
  134.     return 'avm:' || mailbox || '/'
  135.  
  136. logFile: procedure
  137.     parse arg mailbox, magiccookie
  138.  
  139.     return 'avm:' || mailbox || '/logs/' || magiccookie
  140.  
  141. voiceFile: procedure
  142.     parse arg mailbox, magiccookie
  143.  
  144.         if (verify(magiccookie, '/:', 'M') = 0) then
  145.           return 'avm:' || mailbox || '/voices/' || magiccookie
  146.         else
  147.           return magiccookie
  148.  
  149. makeUniqueFile: procedure
  150.     if arg() ~= 0 then do
  151.         rc = "makeUniqueFile: bad args"
  152.         signal error
  153.     end
  154.     return address() || '.' || date('i') || '.' || time('s') || '.' || random(1, 999, time('s'))
  155.  
  156. convertToDate: procedure
  157.     if arg() ~= 1 then do
  158.         rc = "convertToDate: bad args"
  159.         signal error
  160.     end
  161.     parse arg timeInC
  162.  
  163.     actualTime = (timeInC - (2922)*86400) // (86400)
  164.     actualDate = (timeInC - actualTime - 2922*86400) % 86400
  165.  
  166.     return actualDate /* returning it in 'internal' format */
  167.  
  168. convertToTime: procedure
  169.     if arg() ~= 1 then do
  170.         rc = "convertToTime: bad args"
  171.         signal error
  172.     end
  173.     parse arg timeInC
  174.     
  175.     actualTime = (timeInC - (2922)*86400) // (86400)
  176.  
  177.     return actualTime
  178.  
  179. cTime: procedure
  180.     /* 2922 = 8*365 + 2 */
  181.     /* 86400 = 24*60*60 */
  182.     return (date('i')+2922)*86400 + time('s')
  183.  
  184. /* this returns a handle that you must use after initializing log. */
  185. initLogEntry: procedure expose log.
  186.     if arg() ~= 0 then do
  187.         rc = "initLogEntry: bad args"
  188.         signal error
  189.     end
  190.     
  191.     drop log.
  192.         log. = ''
  193.  
  194.         acidname = getclip(address() || 'CIDNAME')
  195.         acidnumber = getclip(address() || 'CIDNUMBER')
  196.  
  197.     /* 2922 = 8*365 + 2 */
  198.     /* 86400 = 24*60*60 */
  199.     log.time = (date('i')+2922)*86400 + time('s')
  200.     log.cidname = acidname
  201.     log.cidnumber = acidnumber
  202.  
  203.     return
  204.  
  205. loadLogEntry: procedure expose log.
  206.     if arg() ~= 2 then do
  207.         rc = "loadLogEntry: bad args"
  208.         signal error
  209.     end
  210.     parse arg mailbox, handle
  211.  
  212.         drop log.
  213.         log. = ''
  214.  
  215.     if ~exists(mailboxDir(mailbox)) then do
  216.         call showDebugger('Dir=' || mailboxDir(mailbox) 'does not exist')
  217.         return
  218.     end
  219.  
  220.     opened = open(handle, logFile(mailbox, handle), 'r')
  221.         if opened then do
  222.         call showDebugger('Loading entry' logFile(mailbox, handle))
  223.         do while ~eof(handle)
  224.             line = readln(handle)
  225.             parse upper var line variable '=' value
  226.             log.variable = value
  227.         end
  228.         call close(handle)
  229.     end; else call showDebugger('Could not load' logFile(mailbox, handle))
  230.     return
  231.  
  232. /* pass a handle here */
  233. saveLogEntry: procedure expose log.
  234.     if arg() ~= 2 then do
  235.         rc = "saveLogEntry: bad args"
  236.         signal error
  237.     end
  238.     parse arg mailbox, handle
  239.  
  240.     if ~exists(mailboxDir(mailbox)) then do
  241.         call showDebugger('Dir=' || mailboxDir(mailbox) 'does not exist')
  242.         return
  243.     end
  244.  
  245.     opened = open(handle, logFile(mailbox, handle), 'w')
  246.  
  247.     if opened then do
  248.         call showDebugger('Saving entry' logFile(mailbox, handle))
  249.         call writeln(handle, 'TYPE=' || log.type)
  250.         call writeln(handle, 'TIME=' || log.time)
  251.         call writeln(handle, 'LENGTH=' || log.length)
  252.  
  253.         call writeln(handle, 'ORIGMAILBOX=' || log.origmailbox)
  254.  
  255.         call writeln(handle, 'CIDNAME=' || log.cidname)
  256.         call writeln(handle, 'CIDNUMBER=' || log.cidnumber)
  257.  
  258.         call writeln(handle, 'COMMENT=' || log.comment)
  259.  
  260.         call writeln(handle, 'FILENAME=' || log.filename)
  261.         call writeln(handle, 'ALTFILENAME=' || log.altfilename)
  262.  
  263.         call writeln(handle, 'RETURNNUMBER=' || log.returnnumber)
  264.         call writeln(handle, 'RETURNSENDFUNC=' || log.returnsendfunc)
  265.         call writeln(handle, 'RETURNSTATUS=' || log.returnstatus)
  266.  
  267.         call writeln(handle, 'RETURNRETRY=' || log.returnretry)
  268.         call writeln(handle, 'RETURNINTERVAL=' || log.returninterval)
  269.  
  270.         call close(handle)
  271.         address rexx 'broadcast' 'addtomailbox' mailbox handle
  272.     end; else call showDebugger('Could not save' logFile(mailbox, handle))
  273.  
  274.     return
  275.  
  276. /* pass a handle here */
  277. updateLogEntry: procedure expose log.
  278.     if arg() ~= 2 then do
  279.         rc = "updateLogEntry: bad args"
  280.         signal error
  281.     end
  282.     parse arg mailbox, handle
  283.  
  284.     if ~exists(mailboxDir(mailbox)) then do
  285.         call showDebugger('Dir=' || mailboxDir(mailbox) 'does not exist')
  286.         return
  287.     end
  288.  
  289.     if ~exists(logFile(mailbox, handle)) then do
  290.         call showDebugger('Unable to update non-existent' logFile(mailbox, handle))
  291.         return
  292.     end
  293.     opened = open(handle, logFile(mailbox, handle), 'w')
  294.  
  295.     if opened then do
  296.         call showDebugger('Updating entry' logFile(mailbox, handle))
  297.         call writeln(handle, 'TYPE=' || log.type)
  298.         call writeln(handle, 'TIME=' || log.time)
  299.         call writeln(handle, 'LENGTH=' || log.length)
  300.  
  301.         call writeln(handle, 'ORIGMAILBOX=' || log.origmailbox)
  302.  
  303.         call writeln(handle, 'CIDNAME=' || log.cidname)
  304.         call writeln(handle, 'CIDNUMBER=' || log.cidnumber)
  305.  
  306.         call writeln(handle, 'COMMENT=' || log.comment)
  307.  
  308.         call writeln(handle, 'FILENAME=' || log.filename)
  309.         call writeln(handle, 'ALTFILENAME=' || log.altfilename)
  310.  
  311.         call writeln(handle, 'RETURNNUMBER=' || log.returnnumber)
  312.         call writeln(handle, 'RETURNSENDFUNC=' || log.returnsendfunc)
  313.         call writeln(handle, 'RETURNSTATUS=' || log.returnstatus)
  314.  
  315.         call writeln(handle, 'RETURNRETRY=' || log.returnretry)
  316.         call writeln(handle, 'RETURNINTERVAL=' || log.returninterval)
  317.  
  318.         call close(handle)
  319.         address rexx 'broadcast' 'refreshmailboxentry' mailbox handle
  320.     end; else call showDebugger('Could not update' logFile(mailbox, handle))
  321.  
  322.     return
  323.  
  324.  
  325.  
  326. showDebugger: procedure
  327.     if arg() ~= 1 then do
  328.         say "showDebugger: ERROR"
  329.         exit 20
  330.     end
  331.  
  332.     parse arg debuggerInfo
  333.     
  334.     firstLine = sourceline(1)
  335.     parse var firstLine '/*' 'TITLE:' title '*/'
  336.     if showlist('p', 'AVMLOGGER') then
  337.         address 'AVMLOGGER' 'add' title ':' debuggerInfo
  338.     else
  339.         say title ':' debuggerInfo
  340.  
  341.     return 
  342.  
  343. /*-----------------------------------------------------------------------*/
  344. /*                         signal processing                             */
  345.  
  346. arexxerror:
  347. error:
  348.     call showDebugger("Error" rc "at line" sigl)
  349.     exit 20
  350.  
  351. break_c:
  352. halt:
  353.     call showDebugger("Halt/Break_C at line" sigl)
  354.     exit 20
  355.  
  356. novalue:
  357.     call showDebugger("No value at line" sigl)
  358.     exit 20
  359.  
  360. syntax:
  361.     call showDebugger("Syntax error" rc "at line" sigl)
  362.     exit 20
  363.  
  364. exit
  365.  
  366. /* this requires logfunctions.avm */
  367.  
  368. loadMailbox: procedure expose mailbox.
  369.     if arg() ~= 1 then do
  370.         rc = "loadMailbox: bad args"
  371.         signal error
  372.     end
  373.  
  374.         mailbox. = ''
  375.     parse arg mailbox
  376.  
  377.     handle = 'mailboxconfig'
  378.     opened = open(handle, mailboxDir(mailbox) || 'mailbox.cfg', 'r')
  379.     if opened then do
  380.         do while ~eof(handle)
  381.             line = readln(handle)
  382.             parse upper var line variable '=' value
  383.             mailbox.variable = value
  384.         end
  385.         call close(handle)
  386.     end
  387.     return
  388.  
  389. /* pass a handle here */
  390. saveMailbox: procedure expose mailbox.
  391.     if arg() ~= 1 then do
  392.         rc = "saveMailbox: bad args"
  393.         signal error
  394.     end
  395.     parse arg mailbox
  396.  
  397.     handle = 'mailboxconfig'
  398.     opened = open(handle, mailboxDir(mailbox) || 'mailbox.cfg', 'w')
  399.  
  400.     if opened then do
  401.         call writeln(handle, 'PASSWORD=' || mailbox.password)
  402.  
  403.         call writeln(handle, 'AUTOFAXFORWARDB=' || mailbox.autofaxforwardb)
  404.         call writeln(handle, 'AUTOFAXFORWARD=' || mailbox.autofaxforward)
  405.         call writeln(handle, 'AUTOFAXFORWARDSCRIPT=' || mailbox.autofaxforwardscript)
  406.  
  407.         call writeln(handle, 'AUTOFORWARDB=' || mailbox.autoforwardb)
  408.         call writeln(handle, 'AUTOFORWARDONDEMAND=' || mailbox.autoforwardondemand)
  409.         call writeln(handle, 'AUTOFORWARD=' || mailbox.autoforward)
  410.         call writeln(handle, 'AUTOFORWARDSCRIPT=' || mailbox.autoforwardscript)
  411.  
  412.         call writeln(handle, 'AUTOPAGEB=' || mailbox.autopageb)
  413.         call writeln(handle, 'AUTOPAGEONDEMAND=' || mailbox.autopageondemand)
  414.         call writeln(handle, 'AUTOPAGE=' || mailbox.autopage)
  415.         call writeln(handle, 'AUTOPAGESCRIPT=' || mailbox.autopagescript)
  416.  
  417.         call writeln(handle, 'AUTOALERTB=' || mailbox.autoalertb)
  418.         call writeln(handle, 'AUTOALERTONDEMAND=' || mailbox.autoalertondemand)
  419.         call writeln(handle, 'AUTOALERTSCRIPT=' || mailbox.autoalertscript)
  420.  
  421.         call close(handle)
  422.     end
  423.  
  424.     return
  425.  
  426. stdabort:
  427. exit
  428.  
  429. stdbusy:
  430. exit
  431.  
  432. stderror:
  433. exit
  434.  
  435. stdtimedout:
  436. exit
  437.  
  438. stdfaxinstruct:
  439. 'playvoice' 'avm:voices/FaxStarting'
  440. action = rc
  441. select
  442.   when action = 0 then nop
  443.   when action = 1 then do; call checkifabort; end
  444.   when action = 4 then nop
  445.   when action = 5 then nop
  446.   when action = 8 then signal stdbusy
  447.   when action = 12 then signal stdabort
  448.   when action = 14 then nop
  449.   when action = 16 then nop
  450.   otherwise signal arexxerror
  451. end
  452.  
  453. stdfax:
  454. faxscript = getclip(address() || 'FAXSCRIPT')
  455. if faxscript = '' then faxscript = 'handlefax'
  456. if symbol('mailbox') = 'VAR' then address rexx faxscript address() mailbox
  457. else address rexx faxscript address() 'anonymous'
  458. exit
  459.  
  460. stddatainstruct:
  461. 'playvoice' 'avm:voices/DataStarting'
  462. action = rc
  463. select
  464.   when action = 0 then nop
  465.   when action = 1 then do; call checkifabort; end
  466.   when action = 4 then nop
  467.   when action = 5 then nop
  468.   when action = 8 then signal stdbusy
  469.   when action = 12 then signal stdabort
  470.   when action = 14 then nop
  471.   when action = 16 then nop
  472.   otherwise signal arexxerror
  473. end
  474.  
  475. stddata:
  476. datascript = getclip(address() || 'DATASCRIPT')
  477. if datascript = '' then datascript = 'handledata'
  478. if symbol('mailbox') = 'VAR' then address rexx datascript address() mailbox
  479. else address rexx datascript address()
  480. exit
  481.  
  482. checkifabort:
  483. 'readnkeys' '1' '3'
  484. action = rc
  485. if action = 0 then value = result
  486. select
  487.   when action = 0 then do; if value = '*' then signal stdabort; end
  488.   when action = 4 then nop
  489.   when action = 5 then nop
  490.   when action = 8 then signal stdbusy
  491.   when action = 10 then nop
  492.   when action = 12 then signal stdabort
  493.   when action = 14 then signal stderror
  494.   when action = 16 then signal stderror
  495.   otherwise signal arexxerror
  496. end
  497. return
  498.  
  499.  
  500.